6c9fc7dac6c150b27989c5f4044ebd1df7c6e83e,h2o-core/src/main/java/water/rapids/ASTStrOp.java,ASTToLower,apply,#Env#Env.StackHelp#AST#,147
Before Change
@Override public String str() { return "tolower"; }
@Override Val apply( Env env, Env.StackHelp stk, AST asts[] ) {
Frame fr = stk.track(asts[1].exec(env)).getFrame();
if (fr.numCols() != 1)
throw new IllegalArgumentException("tolower() only takes a single column of data. " +
"Got " + fr.numCols() + " columns.");
Frame res = null;
Vec vec = fr.anyVec(); assert vec != null;
if (vec.isString()) res = toLowerStringCol(vec);
else throw new IllegalArgumentException("tolower() requires a string column. "
+ "Received " + fr.anyVec().get_type_str() + ". Please convert column to strings first.");
assert res != null;
return new ValFrame(res);
}
private Frame toLowerStringCol(Vec vec) {
After Change
@Override int nargs() { return 1+1; } //(tolower x)
@Override public String str() { return "tolower"; }
@Override Val apply( Env env, Env.StackHelp stk, AST asts[] ) {
Frame fr = stk.track(asts[1].exec(env)).getFrame();
// Type check
for (Vec v : fr.vecs())
if (!(v.isCategorical() || v.isString()))
throw new IllegalArgumentException("tolower() requires a string or categorical column. "
+"Received "+fr.anyVec().get_type_str()
+". Please convert column to a string or categorical first.");
// Transform each vec
Vec nvs[] = new Vec[fr.numCols()];
int i = 0;
for(Vec v: fr.vecs()) {
if (v.isCategorical())
nvs[i] = toLowerCategoricalCol(v);
else
nvs[i] = toLowerStringCol(v);
i++;
}
return new ValFrame(new Frame(nvs));
}
private Vec toLowerCategoricalCol(Vec vec) {